set.seed(123)
#LASSO回归筛选特征值并可视化结果
library(glmnet)
colnames(mimic_sad_aki_lasso[,1:42])#查看前42列的列名（根据自己的数据调整）
y <- as.matrix(mimic_sad_aki_lasso[,1])#提取第一列作为结局（建议结局放在第一列）
x <- as.matrix(mimic_sad_aki_lasso[,2:42])#第2列至第42列作为自变量

#后边的代码除了s值基本不需更改
lasso_model <- glmnet(x,y,family = "binomial",
                      alpha = 1)#表示采用L1正则化，即Lasso回归
max(lasso_model$lambda)
print(lasso_model)
#绘制LASSO图
plot(lasso_model,
     xvar="lambda")

#交叉验证并绘制可视化结果
cv_model <- cv.glmnet(x,y,family="binomial",alpha=1,nfolds = 10)
plot(cv_model)

#根据交叉验证结果，选择lambda值，lambda.min或lambda.1se
lambda_min <- cv_model$lambda.min
lambda_min
lambda_1se <- cv_model$lambda.1se
lambda_1se

#s为Lambda大小，Lambda越大表示模型的正则化强度越大，选择的自变量也越少。
#这里选择的是刚刚得到的lambda.1se的值
coef_lasso <- coef(lasso_model,s=0.008387237)
coef_lasso
#结果显示后边带有数值的变量为筛选得到的变量

#将系数转换为数据框
#coef_df <- data.frame(feature=names(coef_lasso),coefficient=as.numeric(coef_lasso))
#print(coef_df)
